import { administrator, ADMINISTRATOR } from '../../src/lib/Member'
import { errorMsg, okMsg } from '../../src/utils/socket-message'

export default function(client, io) {
  // 添加 - 管理员列表
  client.on('administrator:set', function(data, cb) {
    const { members } = data;
    const { classId = ADMINISTRATOR } = data.room;
    const error = (msg) => errorMsg('administrator:set', msg);

    if (!Array.isArray(members)) {
      console.error('添加 - 管理员列表: => 用户列表不能为空!');
      return cb && cb(error('用户列表不能为空!'))
    }

    if (!classId) {
      return cb && cb(error('room 不能为空!'))
    }

    let classMemberArray = administrator.get(classId) ?? new Map();

    for (const member of members) {
      classMemberArray.set(classId, member);
    }

    administrator.set(classId, classMemberArray);

    console.log('添加 - 管理员列表: => ', members);

    cb && cb({
      status: 'ok',
      resolve: 'response:[administrator:set]',
    })
  });

  // 获取 - 管理员列表
  client.on('administrator:get', function(data, cb) {
    const { classId = 'root' } = data;
    console.log('获取 - 管理员列表: => ', classId);

    const classMemberArray = administrator.get(classId);

    if (cb) {
      cb(okMsg('administrator:get', classMemberArray))
    }
  });

  // 删除 - 管理员列表
  client.on('administrator:remove', function(data, cb) {
    const { member } = data;
    const { classId = 'root' } = data.room;
    console.log('删除 - 管理员列表: => ', classId);

    if (!classId) {
      console.error('{ classId } 房间 ID 不能为空!');
      cb && cb({state: 'error', message: '{ classId } 房间 ID 不能为空!'})
      return
    }

    const classMemberArray: Map<string, any> = administrator.get(classId);
    if (!classMemberArray) {
      console.error('房间没找到，请使用正确的 classId !');
      cb && cb({state: 'error', message: '房间没找到，请使用正确的 classId !'})
      return
    }

    if (!classMemberArray.has(member.userId)) {
      console.error('用户不存在 { classId } 对应的房间!');
      cb && cb({state: 'error', message: '用户不存在 { classId } 对应的房间!'})
      return
    }

    classMemberArray.delete(member.userId)

    cb && cb({
      state: 'ok',
      data: classMemberArray,
      message: '用户删除成功！'
    })
  });
}
